package logs

import (
	"encoding/json"
	"time"
)

// 登录状态常量（与枚举保持一致）
const (
	LoginStatusSuccess = "SUCCESS"
	LoginStatusFail    = "FAIL"
	LoginStatusLocked  = "LOCKED"
)

// SysLogLogin 对应表：sys_log_login
type SysLogLogin struct {
	ID          uint64          `gorm:"column:id;primaryKey;autoIncrement" json:"id"`
	Username    string          `gorm:"column:username;type:varchar(100)" json:"username"` // 用户输入的登录名
	Status      int             `gorm:"column:status;type:enum('SUCCESS','FAIL','LOCKED');not null" json:"status"`
	Reason      string          `gorm:"column:reason;type:varchar(255)" json:"reason"`            // 失败原因
	LoginMethod string          `gorm:"column:login_method;type:varchar(50)" json:"login_method"` // 登录方式
	Country     string          `gorm:"column:country;type:varchar(50)" json:"country"`           // 国家/地区
	Region      string          `gorm:"column:region;type:varchar(50)" json:"region"`             // 地理区域
	IP          string          `gorm:"column:ip;type:varchar(45)" json:"ip"`                     // IP 地址
	Platform    string          `gorm:"column:platform;type:varchar(50)" json:"platform"`         // 平台
	Client      string          `gorm:"column:client;type:varchar(50)" json:"client"`             // 客户端
	DeviceID    string          `gorm:"column:device_id;type:varchar(100)" json:"device_id"`      // 设备ID
	UserAgent   string          `gorm:"column:user_agent;type:text" json:"user_agent"`            // 用户代理
	AppVersion  string          `gorm:"column:app_version;type:varchar(50)" json:"app_version"`   // App 版本号
	RequestData json.RawMessage `gorm:"column:request_data;type:json" json:"request_data"`        // 登录请求入参(JSON，去除敏感信息)
	CreatedAt   time.Time       `gorm:"column:created_at;type:timestamp;autoCreateTime" json:"created_at"`
}

// TableName 指定表名
func (SysLogLogin) TableName() string {
	return "sys_log_login"
}
